﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://www.luogu.com.cn/problem/T227803
/*
题目描述：
题目描述
【题目描述】 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵，你的任务是找到最大的非空(大小至少是1 × 1)子矩阵。

比如，如下4 × 4的矩阵

0 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

的最大子矩阵是

9 2

-4 1

-1 8

这个子矩阵的大小是15。

输入格式
【输入】 输入是一个N×N的矩阵。输入的第一行给出N(0<N≤100)。再后面的若干行中，依次(首先从左到右给出第一行的N个整数，再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数，整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[−127,127]。

输出格式
【输出】 输出最大子矩阵的大小。
*/

// 开始解题：
// 方法——动态规划

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int n = 0;
	cin >> n;
	vector<vector<int>> grid(n + 1, vector<int>(n + 1));
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> grid[i][j];
		}
	}
	// 创建dp表
	vector<vector<int>> dp(n + 1, vector<int>(n + 1));

	// 填表
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			dp[i][j] = dp[i - 1][j] + grid[i][j];
		}
	}

	// 统计结果
	int ret = 0;
	for (int first = 0; first < n; first++) {
		for (int last = first + 1; last <= n; last++) {
			int sum = 0;
			for (int j = 1; j <= n; j++) {
				sum += dp[last][j] - dp[first][j];
				ret = max(ret, sum);
				sum = max(sum, 0);
				
			}
		}
	}
	cout << ret;
	return 0;
}